package cn.edu.sgu.www.pms.service;

import cn.edu.sgu.www.pms.dto.PermissionDTO;
import cn.edu.sgu.www.pms.dto.PermissionInitDTO;
import cn.edu.sgu.www.pms.entity.Permission;
import cn.edu.sgu.www.pms.pager.impl.PermissionPager;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Set;

/**
 * @author 沐雨橙风ιε
 * @version 1.0
 */
public interface PermissionService {

    /**
     * 权限数据初始化
     */
    @Transactional(rollbackFor = Exception.class)
    void init() throws ClassNotFoundException;

    /**
     * 权限数据初始化
     * @param permissionInitDTO 权限信息
     */
    @Transactional(rollbackFor = Exception.class)
    void resources(PermissionInitDTO permissionInitDTO);

    /**
     * 添加权限
     * @param permissionDTO 权限信息
     */
    void insert(PermissionDTO permissionDTO);

    /**
     * 通过ID批量删除权限
     * @param ids 权限ID列表
     */
    void deleteByIds(List<String> ids);

    /**
     * 通过ID修改权限信息
     * @param permissionDTO 权限信息
     */
    void updateById(PermissionDTO permissionDTO);

    /**
     * 查询权限列表
     * @return List<Permission>
     */
    List<Permission> selectList();

    /**
     * 查询全部父级权限
     * @return List<Permission>
     */
    List<Permission> selectParent();

    /**
     * 通过ID查询权限信息
     * @param id 权限ID
     * @return Permission
     */
    Permission selectById(String id);

    /**
     * 查询应用的非匿名子权限
     * @param service 服务名
     * @return List<Permission>
     */
    List<Permission> selectPermissions(String service);

    /**
     * 分页查询权限列表
     * @param pager 分页参数
     * @return Page<Permission>
     */
    Page<Permission> selectByPage(PermissionPager pager);

    /**
     * 通过用户名查询用户权限
     * @param username 用户名
     * @param service 应用名
     * @return Set<String>
     */
    Set<String> selectUserPermissions(String username, String service);
}